A wrapper function is a function in a computer program whose main purpose is to call a second function[1] with little or no additional computation. This is also known as method delegation. Wrapper functions can be used for a number of purposes.
Contents |
Wrapper functions can be used to adapt an existing class or object to have a different interface. This is especially useful when using existing library code.
Wrapper functions can be used to write error checking routines for pre-existing system functions without increasing the length of a code by a large amount by repeating the same error check for each call to the function.[2] All calls to the original function can be replaced with calls to the wrapper, allowing the programmer to forget about error checking once the wrapper is written. A test driver is a kind of wrapper function that exercises a code module, typically calling it repeatedly, with different settings or parameters, in order to rigorously pursue each possible path. It is not deliverable code, but is not throwaway code either, being typically retained for use in regression testing. An interface adaptor is a kind of wrapper function that simplifies, tailors, or amplifies the interface to a code module, with the intent of making it more intelligible or relevant to the user. It may rename parameters, combine parameters, set defaults for parameters, and the like.
In a programming language that does not support multiple inheritance of base classes, wrapper functions can be used to simulate it. Below is an example of part of a class that "inherits" from LinkedList and HashSet.
public class StackSet implements Stack, Set { private LinkedList stack; private HashSet set; public boolean push(Object o) { if (set.add(o)) then return stack.push(o); else return false; } public Object pop() { Object o = stack.pop(); set.remove(o); return o; } public boolean contains(Object o) { return set.contains(o); } }
Wrapper functions can be used to make writing computer programs easier. An example of this is the MouseAdapter and similar classes in the Java AWT library.[3]
Many library functions such as in the C Standard Library act as an interface (abstraction) for system calls. For example, "fork" and "execve" are GLIBC functions that call the "fork" and "execve" system calls, respectively. This often leads to incorrect use of the terms "system call" and "syscall" to refer to the library calls that are wrappers for the actual system calls with the same name.